package com.fin.quant.domain.service;

import com.fin.quant.instra.mysql.model.Portfolio;
import java.util.List;

/**
 * 投资组合领域服务接口
 */
public interface PortfolioDomainService {

    /**
     * 根据ID查询投资组合
     */
    Portfolio findById(Long portfolioId);

    /**
     * 根据组合代码查询投资组合
     */
    Portfolio findByPortfolioCode(String portfolioCode);

    /**
     * 分页查询用户投资组合列表
     */
    List<Portfolio> findPortfolios(Long userId, int page, int pageSize,
            String portfolioType, String riskLevel);

    /**
     * 创建投资组合
     */
    Portfolio createPortfolio(Portfolio portfolio);

    /**
     * 更新投资组合
     */
    Portfolio updatePortfolio(Portfolio portfolio);

    /**
     * 删除投资组合
     */
    boolean deletePortfolio(Long portfolioId);

    /**
     * 添加资产到组合
     */
    boolean addAssetToPortfolio(Long portfolioId, Long assetId, Double quantity, Double costPrice);

    /**
     * 从组合中移除资产
     */
    boolean removeAssetFromPortfolio(Long portfolioId, Long assetId);

    /**
     * 更新组合中的资产
     */
    boolean updateAssetInPortfolio(Long portfolioId, Long assetId, Double quantity, Double costPrice);

    /**
     * 获取组合中的资产列表
     */
    List<Object> getPortfolioAssets(Long portfolioId);

    /**
     * 计算组合指标
     */
    Object calculatePortfolioMetrics(Long portfolioId);

    /**
     * 对比投资组合
     */
    List<Object> comparePortfolios(List<Long> portfolioIds);

    /**
     * 获取投资组合总数
     */
    long countPortfolios(Long userId, String portfolioType, String riskLevel);
}
